/** 第三方登录
 * @see https://www.html5plus.org/doc/zh_cn/oauth.html#plus.oauth.AuthService.id
 * **********************/

/**
 * 官方只定义了string，我这里定义的细一点

	"weixin" - 表示微信登录鉴权
	"qq" - 表示QQ登录鉴权
	"sinaweibo" - 表示新浪微博登录鉴权
	"xiaomi" - 表示小米登录鉴权
	"apple" - 表示苹果登录（仅iOS13+系统支持）
	"univerify" - 表示一键登录（HBuilderX3.0.0+版本支持），详情参考一键登录使用指南
	"google" - 表示Google登录（HBuilderX3.2.7+版本支持）
	"facebook" - 表示Facebook登录（HBuilderX3.2.7+版本支持）
 */
export type AuthServiceId = "weixin" | "qq" | "sinaweibo" | "xiaomi" | "apple" | "univerify" | "google" | "facebook"

/**
 * 缓存的service
 */
let services : PlusOauthAuthService[]

/**
 * 获取services的P
 */
const getServices = new Promise<PlusOauthAuthService[]>((resolve, reject) => {
	plus.oauth.getServices(ss => {
		services = ss
		resolve(ss)
	}, e => reject(e));
})

/**
 * 获取Service
 * @param id service的id
 */
const getService = async (id : AuthServiceId) : Promise<PlusOauthAuthService> => {
	await getServices
	return services.find(s => s.id == id)!
}

/**
 * 登录
 * target
 * authResult { openid 8AE5C28F3 & access_token C1CA83F3 } 
 * userInfo { unionid 5B3482650CF }
 */
const login = async (id : AuthServiceId): Promise<any> => {
	await getServices
	const s = await getService(id)
	if (s.authResult) plus.nativeUI.alert("已经登录认证!");

	return new Promise((resolve, reject) => {
		s.login(e => resolve(e), e => reject(e));
	})
}

/**
 * 退出所有第三方登录
 */
const logout = async () => {
	await getServices
	await new Promise((resolve, reject) => {
		services.forEach(s => {
			s.logout(() => { }, e => reject(e))
		})
		resolve(undefined)
	})
}

const oAuth = {
	getService,
	login,
	logout
}

export default oAuth